import java.util.concurrent.*;

/**
 * @author wcj
 * @Date 2021/6/17 14:17
 * @Version 1.0
 */
public class BlockingQueue {

    public static void main(String[] args) {
        // 底层是数组的有界阻塞队列，默认是非公平的，可以设置为公平的
        ArrayBlockingQueue<Integer> integers = new ArrayBlockingQueue<Integer>(1000, true);
        // 底层是链表结构的有界阻塞队列，默认容量最大值为Integer.MAX_VALUE
        LinkedBlockingQueue<Object> objects = new LinkedBlockingQueue<>();
        // 支持优先级排序的无界阻塞队列
        PriorityBlockingQueue<Object> objects1 = new PriorityBlockingQueue<>();
        // 一个支持延时的无界阻塞队列，可以用来实现缓存设计和定时任务
        DelayQueue<Delayed> delayeds = new DelayQueue<>();
        // 一个不存储元素的阻塞队列，相当于传球手，每个put操作必须对应一个take操作
        SynchronousQueue<Object> objects2 = new SynchronousQueue<>();
        // 一个底层为链表的无界阻塞队列，支持transfer和tryTransfer操作的队列
        LinkedTransferQueue<Object> objects3 = new LinkedTransferQueue<>();
        // 一个底层为链表的双向阻塞队列，可以用于工作窃取模式
        LinkedBlockingDeque<Object> objects4 = new LinkedBlockingDeque<>();
    }
}
